package club.beimeng.msmservice.controller;

import club.beimeng.commonutils.R;
import club.beimeng.msmservice.service.MsmService;
import club.beimeng.msmservice.utils.RandomUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;


@RestController
@RequestMapping("/edumsm/msm")
@CrossOrigin
public class MsmController {

    private final static Logger logger = Logger.getLogger("SendEmail");
    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate; // springboot 自带redis整合工具


    // 发送短信的方法
    @GetMapping("sendPhone/{phoneNumber}")
    public R sendMsm(@PathVariable String phoneNumber){

        //TODO 阿里云开发
        return R.error();
    }

    // 发送邮件的方法
    @GetMapping("sendEmail/{email}")
    public R sendEmail(@PathVariable String email){
        logger.info("发送邮件给 "+email);
        // 生成验证码
        String code = getRandomCode(email);
        HashMap<String, Object> param = new HashMap<>();
        param.put("code",code);
        //发送验证码
        boolean isSend = msmService.sendEmail(param,email);
        if (isSend){
            logger.info("发送邮件给 "+email + "成功");
            return R.ok();
        }else {
            logger.info("发送邮件给 "+email + "失败");
            return R.error();
        }
    }



    //获取验证码的方法
    private String getRandomCode(String account){
        // 1 从redis获取验证码，如果获取到直接返回 ,并重新发送一次
        String s = redisTemplate.opsForValue().get(account);

        if (!StringUtils.isEmpty(s)){
            logger.info("使用已有验证码");
            return s;
        }else {
            // 2 如果redis获取不到，就生成新的验证码，并再redis设置过期时间
            String code = RandomUtil.getSixBitRandom();
            logger.info("生成了新的验证码");
            //设置有效时间
            redisTemplate.opsForValue().set(account,code,5, TimeUnit.MINUTES);
            return code;
        }
    }


}
/*
 *
 * @author Mr.Bao
 * @date 2021/8/2 16:34
 */